import re
import json
from langchain_core.tools import tool
from typing import Annotated

def get_parameter(input_string: str) -> str:
    # Step 1: Keep only the part after the last "=" or ":"
    idx = max(input_string.rfind('='), input_string.rfind(':'))
    if idx != -1:
        input_string = input_string[idx + 1:]

    # Step 2: Check for quotes
    last_double_quote_idx = input_string.rfind('"')
    last_single_quote_idx = input_string.rfind("'")

    if last_double_quote_idx == -1 and last_single_quote_idx == -1:
        # No quotes found, return stripped input string
        return input_string.strip()

    if last_double_quote_idx > last_single_quote_idx:
        start_idx = input_string.rfind('"', 0, last_double_quote_idx)
        if start_idx != -1:
            return input_string[start_idx + 1:last_double_quote_idx].strip()
    else:
        start_idx = input_string.rfind("'", 0, last_single_quote_idx)
        if start_idx != -1:
            return input_string[start_idx + 1:last_single_quote_idx].strip()

    # If no valid quote pairs are found, return an empty string
    return ""

def extract_first_json(text):
    pattern = r'\{.*?\}'
    matches = re.findall(pattern, text, re.DOTALL)
    if matches:
        last_json = matches[0]  # 取第一个
        return json.loads(last_json)
    return None


# 取得当前日期
from datetime import datetime
@tool
def get_current_date(
    input: Annotated[str, "参数占位符，可指定为任意字符串或None。"] = None
    )->str:
    """
    取得当天日期(今天日期)，以YYYY年MM月DD日的形式返回
    """
    # 获取当前日期
    now = datetime.now()
    # 按照 "2023年09月04日" 格式进行格式化
    formatted_date = now.strftime("%Y年%m月%d日")
    return formatted_date

# 获取用户的输入
@tool
def request_user_input(
    question: Annotated[str, "向用户提问的问题。"]
    )->str:
    """
    向用户提出问题，获取用户的回答，以补充所需要的信息。
    """
    ans = input(f"\n{question}\n")
    return ans

if __name__ == '__main__':
    test_input_v2 = """ key1: value1 = ' some text inside ' other content 'final text'
     ABC """
    processed_string_v2 = get_parameter(test_input_v2)
    print(processed_string_v2)